<?php
/**
 * 前台会员微信支付模块的逻辑处理
 * ============================================================================
 * 版权所有 2017-2020 北京优特世纪科技有限公司，并保留所有权利。
 * 网站地址: http://www.unitewww.com;
 * ============================================================================
 * 这不是一个自由软件！您只能在不用于商业目的的前提下对程序代码进行修改和使用；
 * 不允许对程序代码以任何形式任何目的的再发布。
 * ============================================================================
 * @since: 1.0
 * @version: 1.0
 **/
namespace Home\Controller;
use Think\Controller;
class WxPayController extends Controller {
    
    /**
    +--------------------------------------------------------------------------
    * 会员商城消费微信支付
    * @author:XC跃
    * @date: 2018-07-02
    +--------------------------------------------------------------------------
    */
    public function orderPay(){

        //接收值
        $orid = trim(I('get.oid'));
        //实例化相关表
        $orident = M('order');
        //查询订单使用信息
        $count = $orident->where("`or_batch`='".$orid."'")->count();
        //判断是否存在该订单
        if($count=='0'){
            $this->error("订单不存在",U('/Home/Order/orderList'));
        }
        $this->wxpay($orid,1);
    }
    
    /**
    +--------------------------------------------------------------------------
     * 微信支付处理
     * @author:XC跃
     * @date: 2018-07-02
    +--------------------------------------------------------------------------
     */
    public function wxpay($orid,$type){
    	$usid = session('user_auth.usid');
        //实例化相关表
        $usident = M('user');
        $orident = M('order');
        //$poident = M('prop_order');
        //获取用户授权
//        $openid = $usident->where("`us_uid`='".$usid."'")->getField('openid');
        $openid = session('openid');
       if (!$openid) {
	        $this->error("用户未授权",U('/Home/User/index'));
	    }
        
        if($type==1){
            //查询订单使用信息
            $orFind= $orident->where("`or_batch`='".$orid."'")->find();
            $body  = "会员商城消费".$orFind['or_zmon']."元";
            $title = "会员商城消费";
            //$batch = $orFind['oc_batch'];
            $money = $orFind['or_zmon']*100;
            $geturl= "http://".$_SERVER['HTTP_HOST']."/Home/WxPay/orderHandle/";
            $errurl= "http://".$_SERVER['HTTP_HOST']."/Home/Order/orderList";
        }
        vendor("WxpayAPI.WxPay", "", ".JsApiPay.php");
        vendor("WxpayAPI.WxPay", "", ".Api.php");
        vendor("WxpayAPI.WxPay", "", ".Data.php");
        vendor("WxpayAPI.WxPay", "", ".Exception.php");
        //实例化支付API
        $WxPayApi=new \WxPayApi();
        //第一步、获取支付信息  包括openid
        $input = new \WxPayUnifiedOrder();
        $input->SetBody($body);
        $input->SetAttach($title);
        $input->SetOut_trade_no($orid);
        $input->SetTotal_fee($money);
        $input->SetTime_start(date("YmdHis"));
        $input->SetTime_expire(date("YmdHis", time() + 6000000));
        $input->SetNotify_url($geturl);
        $input->SetTrade_type("JSAPI");
        $input->SetOpenid($openid);
//		var_dump($input);
        $order = $WxPayApi->unifiedOrder($input);
        if($order['err_code']=='INVALID_REQUEST'){
            $this->error($order['err_code_des'],$errurl);
        }elseif($order['err_code']=='ORDERPAID'){
            $this->error($order['err_code_des'],$errurl);
        }
        //获取js参数
        $tools = new \JsApiPay();
        $jsApiParameters = $tools->GetJsApiParameters($order);
        //var_dump($jsApiParameters);die;
        $this->assign("jsApiParameters",$jsApiParameters);
        $this->assign("money",$money/100);
        $this->assign("title",$title);
        $this->assign("body",$body);
        $this->assign('okurl',$errurl);
        $this->display("WxPay/wxpay");
    }
    /**
    +--------------------------------------------------------------------------
    * 微信支付回调处理(商品购买)
    * @author:XC跃
    * @return [type] [description]
    * @date: 2018-07-03
    --------------------------------------------------------------------------
    */
    public function orderHandle()
    {
        $xml = $GLOBALS['HTTP_RAW_POST_DATA']; //返回的xml
        //echo $xml;die;
        file_put_contents('wei_pay.txt', $xml); //记录日志 支付成功后查看xml.txt文件是否有内容 如果有xml格式文件说明回调成功
        $xmlArr = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
        $batch  = $xmlArr['out_trade_no']; //订单号
        $result_code = $xmlArr['result_code']; //状态
        //var_dump($result_code);die;
        if ($result_code == 'SUCCESS') { //数据库操作
        	//执行订单支付成功
            update_pay_status($batch,'3');  //支付成功处理

            echo 'SUCCESS'; //返回成功给微信端 一定要带上不然微信会一直回调8次            
        } else {//失败
            exit;
        }
    }
    /**
    +--------------------------------------------------------------------------
    * 微信支付回调处理(游戏商城道具购买)
    * @author:XC跃
    * @return [type] [description]
    * @date: 2018-07-03
    --------------------------------------------------------------------------
    */
   //  public function propHandle()
   //  {
   //      $uname = session('user_auth.uname');
	  //   $ptype = C('PAY_TYPE');//支付方式
	  //   //实例化相关表
	  //   $poident = M('prop_order');

   //      $xml = $GLOBALS['HTTP_RAW_POST_DATA']; //返回的xml
   //      //echo $xml;die;
   //      file_put_contents('wei_pay.txt', $xml); //记录日志 支付成功后查看xml.txt文件是否有内容 如果有xml格式文件说明回调成功
   //      $xmlArr = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
   //      $batch  = $xmlArr['out_trade_no']; //订单号
   //      $result_code = $xmlArr['result_code']; //状态
   //      //var_dump($result_code);die;
   //      if ($result_code == 'SUCCESS') { //数据库操作

   //      	echo 'SUCCESS'; //返回成功给微信端 一定要带上不然微信会一直回调8次 
   //      	//执行订单支付成功            
   //          if(stripos($batch,'DJ') !== false){
			//     $poFind= $poident->where("`po_batch`='".$batch."'")->find();
			//     $data['po_pay']  = $ptype['3'];
			//     $data['po_state']= '1';
			//     $pores = $poident->where("`po_batch`='".$batch."'")->save($data);
			//     if($pores>0){
			//         $type = $poFind['po_type'];
			//         //若类型为注册码或交易码，则重新生成相应的编码信息
			//         if($type=='1' || $type=='2'){
			//             add_user_code($poFind['po_uid'],$uname, $type, $poFind['po_num']);
			//         }
			//     }
			// }
                       
   //      } else {//失败
   //          exit;
   //      }
   // }
}